home *** CD-ROM | disk | FTP | other *** search
/ InterCD 2000 January / january_2000.iso / Site Building / 3Dcubed / eShopFactory32.exe / shopfactory_email.cgi
Encoding:
Text File  |  1999-08-23  |  8.8 KB  |  290 lines

  1. #!/usr/local/bin/perl
  2.  
  3. $mailprog = '/bin/sendmail';
  4.  
  5. # valid referers
  6. @referers = ('.*shopwizard_order\.cgi', '.*method\.html', '.*order2\.html', '.*order3\.html', '.*order4\.html', '.*shopfactory_order\.cgi', '.*VueltaOk\.html', '.*authorized\.html', '.*vuelta\.exe', '.*customerdtl\.html', '.*deliverydtl\.html', '.*ordernav\.html');
  7.  
  8. # required fields
  9. #@required = ("shipping_region", "shipping_method", "tax_area");
  10.  
  11. &check_referer;
  12. &parse_form;
  13. &check_required;
  14. &get_date;
  15. &send_email;
  16. if($FORM{'redirect_only'} ne "true") {
  17.     &print_html;
  18. } else {
  19.     &redirect;
  20. }
  21.  
  22. sub get_date {
  23.     @days = ('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday');
  24.     @months = ('January','February','March','April','May','June','July','August','September','October','November','December');
  25.  
  26.     ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
  27.     if ($hour < 10) { $hour = "0$hour"; }
  28.     if ($min < 10) { $min = "0$min"; }
  29.     if ($sec < 10) { $sec = "0$sec"; }
  30.  
  31.     $date = "$days[$wday], $months[$mon] $mday, $year at $hour\:$min\:$sec";
  32. }
  33.  
  34. sub send_email {
  35.  
  36.     if($FORM{'recipient'} eq "") {
  37.         print "Content-type: text/html\n\n";
  38.  
  39.         print "<body";
  40.         &body_attributes;
  41.         print ">\n";
  42.         print "<center><img src=\"lockssl-on.gif\"></center><br>\n";
  43.         print "<br><br><br><br><center>\n";
  44.         print "<font size=\"+2\">$FORM{'ln_email_required'}</font><br><br>\n";
  45.         print "</center>";
  46.         print "</body>\n</html>";
  47.         die;
  48.     }
  49.  
  50.     $FORM{'order_email'} =~ s/\\n/\n/g;
  51.  
  52.     open(MAIL,"|$mailprog -t");
  53.     print MAIL "To: $FORM{'recipient'}\n";
  54.     print MAIL "From: $FORM{'customer_email'} ($FORM{'customer_name'})\n";
  55.     print MAIL "Subject: Order From $FORM{'shopname'}\n";
  56.     print MAIL "\n----------------------------------------\n";
  57.     print MAIL "Below is an order from $FORM{'shopname'}\n";
  58.     print MAIL "Submitted by: $FORM{'customer_name'}\n";
  59.     print MAIL "       email: $FORM{'customer_email'}\n";
  60.     print MAIL "        date: $date\n";
  61.     print MAIL "----------------------------------------\n\n";
  62.  
  63.     print MAIL "$FORM{'order_email'}\n";
  64.     print MAIL "\n----- $FORM{'ln_payment_method'} -----\n";
  65.  
  66.     if($FORM{'card_type'}) {
  67.         print MAIL "$FORM{'ln_cc_type'}: $FORM{'card_type'}\n";
  68.         print MAIL "$FORM{'ln_cc_name'}: $FORM{'card_name'}\n";
  69.         print MAIL "$FORM{'ln_cc_number'}: $FORM{'card_number'}\n";
  70.         print MAIL "$FORM{'ln_cc_expiry'}: $FORM{'card_exp_month'}\/$FORM{'card_exp_year'}\n";
  71.     } else {
  72.         print MAIL "$FORM{'ln_payment_method'}: $FORM{'payment_method'}\n";
  73.         foreach $key (keys %FORM) {
  74.             if($key =~ "field_") {
  75.                 $temp = $key;
  76.                 $temp =~ s/field_//g;
  77.                 print MAIL "$temp: $FORM{$key}\n";
  78.             }    
  79.         }
  80.     }
  81.  
  82.     print MAIL "\n----- $FORM{'ln_total'} -----\n";
  83.     print MAIL "$FORM{'ln_total_weight'}: $FORM{'total_weight'}\n";
  84.     print MAIL "$FORM{'ln_purchase_price'}: $FORM{'currency_symbol'}$FORM{'total_ex_tax'}\n";
  85.     print MAIL "$FORM{'ln_total_tax'}: $FORM{'currency_symbol'}$FORM{'tax_value'}\n";
  86.     print MAIL "$FORM{'ln_total_shipping'}: $FORM{'currency_symbol'}$FORM{'shipping_value'}\n";
  87.     print MAIL "$FORM{'ln_total_inc'}: $FORM{'currency_symbol'}$FORM{'total_inc_tax'}\n";
  88.  
  89.     print MAIL "\nBrowser: $ENV{'HTTP_USER_AGENT'}\n";
  90.     print MAIL "Remote Host: $ENV{'REMOTE_HOST'}\n";
  91.     print MAIL "Remote Address: $ENV{'REMOTE_ADDR'}\n";
  92.  
  93.     close (MAIL);
  94.  
  95.     # check for @ symbol before sending email
  96.     if ($FORM{'dont_email_customer'} ne "true") {
  97.         if ($FORM{'customer_email'} =~ "\@") {
  98.             open(MAIL,"|$mailprog -t");
  99.             print MAIL "To: $FORM{'customer_email'}\n";
  100.             print MAIL "From: $FORM{'recipient'} ($FORM{'shopname'})\n";
  101.             print MAIL "Subject: Order Confirmation From $FORM{'shopname'}\n";
  102.             print MAIL "\n----------------------------------------\n";
  103.             print MAIL "Below is an order from $FORM{'shopname'}\n";
  104.             print MAIL "Submitted by: $FORM{'customer_name'}\n";
  105.             print MAIL "       email: $FORM{'customer_email'}\n";
  106.             print MAIL "        date: $date\n";
  107.             print MAIL "----------------------------------------\n\n";
  108.  
  109.             print MAIL "$FORM{'order_email'}\n";
  110.  
  111.             print MAIL "\n----- $FORM{'ln_total'} -----\n";
  112.             print MAIL "$FORM{'ln_total_weight'}: $FORM{'total_weight'}\n";
  113.             print MAIL "$FORM{'ln_purchase_price'}: $FORM{'currency_symbol'}$FORM{'total_ex_tax'}\n";
  114.             print MAIL "$FORM{'ln_total_tax'}: $FORM{'currency_symbol'}$FORM{'tax_value'}\n";
  115.             print MAIL "$FORM{'ln_total_shipping'}: $FORM{'currency_symbol'}$FORM{'shipping_value'}\n";
  116.             print MAIL "$FORM{'ln_total_inc'}: $FORM{'currency_symbol'}$FORM{'total_inc_tax'}\n";
  117.  
  118.             print MAIL "\nBrowser: $ENV{'HTTP_USER_AGENT'}\n";
  119.             print MAIL "Remote Host: $ENV{'REMOTE_HOST'}\n";
  120.             print MAIL "Remote Address: $ENV{'REMOTE_ADDR'}\n";
  121.             close (MAIL);
  122.         }
  123.     }
  124.     
  125. }
  126.  
  127. sub print_html {
  128.     print "Content-type: text/html\n\n";
  129.  
  130.     print "<html";
  131.     if ($CONFIG{'html_lang'}) {
  132.         print " lang=\"$CONFIG{'html_lang'}\"";
  133.     }
  134.     if ($CONFIG{'html_dir'}) {
  135.         print " dir=\"$CONFIG{'html_dir'}\"";
  136.     }
  137.     print ">\n";
  138.     print "<head>\n";
  139.     if ($CONFIG{'http_charset'}) {
  140.         print "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=$CONFIG{'http_charset'}\">\n";
  141.     }
  142.     print "<meta http-equiv=\"refresh\" content=\"3;url=$FORM{'thankyou_url'}\">\n";
  143.     print "</head>\n";
  144.     print "<body";
  145.     &body_attributes;
  146.     print ">\n";
  147.     print "<center><img src=\"lockssl-on.gif\"></center><br>\n";
  148.     print "<br><br><br><br><center>\n";
  149.     print "<font size=\"+2\">$FORM{'ln_secure_final'}.</font><br><br>\n";
  150.     print "<font size=\"-1\"><a href=\"$FORM{'thankyou_url'}\">$FORM{'ln_next'}</a></font>\n";
  151.     print "</center>";
  152.     print "</body>\n</html>";
  153. }
  154.  
  155. sub redirect {
  156.     print "Location: $FORM{'thankyou_url'}\n\n";
  157. }
  158.  
  159. sub check_referer {
  160.     if ($ENV{'HTTP_REFERER'}) {
  161.         foreach $referer (@referers) {
  162.             if ($ENV{'HTTP_REFERER'} =~ /$referer/i) {
  163.                 $referer_ok = '1';
  164.                 last;
  165.             }
  166.         }
  167.     } else {
  168.         $referer_ok = '1';
  169.     }
  170.  
  171.     if ($referer_ok != 1) {
  172.         &error('bad_referer');
  173.     }
  174. }
  175.  
  176. sub check_required {
  177.     foreach $require (@required) {
  178.         if ($require eq 'bgcolor' ||
  179.             $require eq 'background' ||
  180.             $require eq 'text_color' ||
  181.             $require eq 'link_color' ||
  182.             $require eq 'alink_color' ||
  183.             $require eq 'vlink_color') {
  184.             if (!($CONFIG{$require}) || $CONFIG{$require} eq ' ') {
  185.                 push(@ERROR, $require);
  186.             }
  187.         } elsif (!($FORM{$require}) || $FORM{$require} eq ' ') {
  188.             push(@ERROR, $require);
  189.         }
  190.     }
  191.     if (@ERROR) {
  192.         &error('missing_fields', @ERROR);
  193.     }
  194. }
  195.  
  196. sub parse_form {
  197.  
  198.     if ($ENV{'REQUEST_METHOD'} =~ 'GET') {
  199.         @pairs = split(/&/, $ENV{'QUERY_STRING'});        # Split the name-value pairs
  200.     } elsif ($ENV{'REQUEST_METHOD'} =~ 'POST') {
  201.         read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});    # Get the input
  202.         @pairs = split(/&/, $buffer);                    # Split the name-value pairs
  203.     } else {
  204.         &error('request_method');
  205.     }
  206.  
  207.     foreach $pair (@pairs) {
  208.         ($name, $value) = split(/=/, $pair);            # Split pair into name and value
  209.  
  210.         $name =~ tr/+/ /;                                # un-URL-encode the name
  211.         $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
  212.         $value =~ tr/+/ /;                                # un-URL-encode the value
  213.         $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
  214.  
  215.         $value =~ s/<!--(.|\n)*-->//g;                    # remove possible SSI directives from value
  216.  
  217.         if ($name eq 'http_charset' ||
  218.             $name eq 'html_lang' ||
  219.             $name eq 'html_dir' ||
  220.             $name eq 'bgcolor' ||
  221.             $name eq 'background' ||
  222.             $name eq 'text_color' ||
  223.             $name eq 'link_color' ||
  224.             $name eq 'alink_color' ||
  225.             $name eq 'vlink_color' && ($value)) {
  226.             $CONFIG{$name} = $value;
  227.         } else {
  228.             if ($FORM{$name} && ($value)) {
  229.                 $FORM{$name} = "$FORM{$name}, $value";
  230.             } elsif ($value) {
  231.                 $FORM{$name} = $value;
  232.             }
  233.         }
  234.     }
  235. }
  236.  
  237. sub error {
  238.     ($error, @error_fields) = @_;
  239.  
  240.     print "Content-type: text/html\n\n";
  241.     print "<html>\n<body";
  242.     &body_attributes;
  243.     print ">\n";
  244.  
  245.     if ($error eq 'bad_referer') {
  246.         print "<center>\n<h1>Bad Referrer - Access Denied</h1>\n</center>\n";
  247.         print "The form that is trying to use this CGI application\n";
  248.         print "resides at: $ENV{'HTTP_REFERER'}, which is not allowed access.\n";
  249.     } elsif ($error eq 'request_method') {
  250.         print "<center>\n<h1>Error: Request Method</h1>\n</center>\n";
  251.         print "The Request Method of the submitted form did not match\n";
  252.         print "either GET or POST.<p>\n";
  253.     } elsif ($error eq 'missing_fields') {
  254.         print "<center>\n<h1>Error: Missing Fields</h1>\n</center>\n";
  255.         print "The following fields require values:<p>\n";
  256.         print "<ul>\n";
  257.         foreach $missing_field (@error_fields) {
  258.             print "<li>$missing_field\n";
  259.         }
  260.         print "</ul>\n";
  261.     }
  262.  
  263.     print "<p><hr size=\"2\"></p>\n";
  264.     print "<center><a href=\"$ENV{'HTTP_REFERER'}\">Go back</a>\n";
  265.     print "</body>\n</html>\n";
  266.  
  267.     exit;
  268. }
  269.  
  270. sub body_attributes {
  271.     if ($CONFIG{'bgcolor'}) {
  272.         print " bgcolor=\"$CONFIG{'bgcolor'}\"";
  273.     }
  274.     if ($CONFIG{'background'} =~ /http\:\/\/.*\..*/) {
  275.         print " background=\"$CONFIG{'background'}\"";
  276.     }
  277.     if ($CONFIG{'link_color'}) {
  278.         print " link=\"$CONFIG{'link_color'}\"";
  279.     }
  280.     if ($CONFIG{'vlink_color'}) {
  281.         print " vlink=\"$CONFIG{'vlink_color'}\"";
  282.     }
  283.     if ($CONFIG{'alink_color'}) {
  284.         print " alink=\"$CONFIG{'alink_color'}\"";
  285.     }
  286.     if ($CONFIG{'text_color'}) {
  287.         print " text=\"$CONFIG{'text_color'}\"";
  288.     }
  289. }
  290.